Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
Three.js - "parent.traverse is not a function" error

I have a 3D model of a car. I would like to add a function to change the color of the vehicle upon clicking on one of the color choice but currently I'm getting an error saying "parent.traverse is not a function" at "at setMaterial" and "HTMLDivElement.selectSwatch". Can anyone notice what am I doing wrong?

HTML

<div class="palette" id="js-palette">
    <div class="pallete__slide" id="js-palette-slide"></div>
</div>

JavaScript

let theModel = './cars/scene.gltf'

let activeOption = 'Object_59'

const colors = [
        {
            color: "000000",
        },
        {
            color: "545252",
        },
    ];



function buildColors(colors) {
    for (let [i, color] of colors.entries()) {
        let colorpalette = document.createElement('div');
        colorpalette.classList.add('pallete__colors');

        colorpalette.style.background = '#' + color.color;

        colorpalette.setAttribute('data-key', i);
        palette.append(colorpalette)

    }
}

buildColors(colors)

// Swatches
const swatches = document.querySelectorAll(".pallete__colors");

for (const colorpalette of swatches) {
    colorpalette.addEventListener('click', selectSwatch);
}

function selectSwatch(e) {
    let color = colors[parseInt(e.target.dataset.key)];
    let new_mtl;
    let new_color = parseInt('0x' + color.color)

    if (color.texture) {
        let txt = new THREE.TextureLoader().load(color.texture);

        txt.repeat.set(color.size[0], color.size[1], color.size[2]);
        txt.wrapS = THREE.RepeatWrapping;
        txt.wrapT = THREE.RepeatWrapping;

        new_mtl = new THREE.MeshPhongMaterial({map: txt, shininess: color.shininess ? color.shininess : 10});
    } else {
        new_mtl = new THREE.MeshPhongMaterial({
            color: parseInt('0x' + color.color),
            shininess: color.shininess ? color.shininess : 10
        });
    }
    setMaterial(theModel, activeOption, new_mtl, new_color);
}

function setMaterial(parent, type, mtl, new_color) {
    parent.traverse(o => {
        if (o.isMesh && o.nameID != null) {
            if (o.nameID == type) {
                o.material.color.set(new_color);
            }
        }
    });
}
about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda